package com.example.user.service.domain.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

/**
 * 密码编码器配置类
 * 独立配置以避免循环依赖
 * 
 * 这个类专门用于配置密码编码器Bean，独立出来可以避免在复杂依赖关系中产生循环依赖问题
 */
@Configuration
public class PasswordConfig {

    /**
     * 密码编码器Bean
     * 使用BCrypt算法对密码进行加密和验证
     * 
     * BCrypt是一种强大的密码哈希函数，具有以下特点：
     * 1. 自动加盐(Salt) - 每次加密都会生成随机盐值，防止彩虹表攻击
     * 2. 可配置的计算复杂度 - 可以调整计算轮数来平衡安全性和性能
     * 3. 单向性 - 无法从哈希值反推出原始密码
     * 
     * @return PasswordEncoder 密码编码器实例
     */
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}